//5．编写一个函数接受这些参数：内含int类型元素的数组名、数组的大小和一个代表选取次数的值。
//该函数从数组中随机选择指定数量的元素，并打印它们。
//每个元素只能选择一次（模拟抽奖数字或挑选陪审团成员）。
//另外，如果你的实现有time()（第12章讨论过）或类似的函数，
//可在srand()中使用这个函数的输出来初始化随机数生成器rand()。
//编写一个简单的程序测试该函数。
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void choujiang(int array[], int size, int times);

//排序后显示，看会不会抽到重复的
void show_sorted(int array[], int size);

int comp(const void *a, const void *b);

#define SIZE 100
#define TIMES 50

int main(void) {

    int array[100];
    for (int i = 0; i < 100; ++i) {
        array[i] = i + 1;
    }
    choujiang(array, SIZE, TIMES);
    return 0;
}

void choujiang(int array[], int size, int times) {
    int result[times];
    for (int i = 0; i < times; ++i) {
        srand(time((time_t *) NULL));
        int pos = rand() % size;
        result[i] = array[pos];
        //将没被抽到的和抽到的换位置
        array[pos] = array[size - 1];
        //换位置后不会再被抽到
        size--;
    }
    puts("抽到的数字如下：");
    show_sorted(result, times);
    for (int j = 0; j < times; ++j) {
        printf("%4d", result[j]);
        if (j % 10 == 9) puts("");
    }

}

void show_sorted(int array[], int size) {
    qsort(array, size, sizeof(int), comp);
}

int comp(const void *a, const void *b) {
    int a1 = *(int *) a;
    int b1 = *(int *) b;
    if (a1 > b1) return 1;
    if (a1 < b1) return -1;
    return 0;
}